package com.like.bluetooth.exception

open class BluetoothException(message: String?, val code: Int = -10000) : Exception(message) {
    override fun toString(): String {
        return "${this.javaClass.simpleName}($code：$message)"
    }
}

object BluetoothExceptionDisabled : BluetoothException("蓝牙未打开", -10001)
object BluetoothExceptionPermission : BluetoothException("操作失败，缺少蓝牙权限！", -10002)
class BluetoothExceptionBusy(message: String? = "蓝牙繁忙，请稍后再试！") : BluetoothException(message, -10005)
class BluetoothExceptionTimeout(message: String?) : BluetoothException(message, -10006)

// 提前取消超时不做处理。因为这是调用 stopScan() 或者 disconnect() 方法造成的，使用者可以直接在 stopScan() 或者 disconnect() 方法结束后处理 UI 的显示，不需要此回调。
object BluetoothExceptionCancelTimeout : BluetoothException("操作被取消", -10007)
class BluetoothExceptionDeviceDisconnected(address: String?, code: Int = -10003) : BluetoothException("蓝牙设备未连接:$address", code)

fun Exception.toBluetoothException(): BluetoothException {
    // 转换一下异常，方便使用者判断。
    return if (this is BluetoothException) this else BluetoothException(this.message)
}
